תרגול מס' 2 הכרות, הכנת תכנית בשפת C והרצתה במערכת Visual C 1( אתר הקורס: )2 הפעלת סביבת הפיתוח של C++ : Microsoft Visual Visual Studio 2005 )זוהי הגרסה המתוקנת במעבדה, כיום את גרסות,Visual Studio 2008/2010 Express Edition אנו נלמד לעבוד עם סביבת פיתוח בשם לא ניתן להוריד את הגרסה הנ"ל, רק מבחינתנו הן זהות(. נפתח את סביבת הפיתוח ע"י 4 Start All Programs Microsoft Visual Studio 2005 Microsoft Visual Studio 2005 המרכיבים הבסיסיים של סביבת הפיתוח 4 עורך (Editor) משמש לכתיבה נוחה של תכניות C. מהדר (Compiler) מתרגם את קבצי המקור שאתם כותבים בשפת C לשפת המכונה. כתוצאה מההידור נוצר קובץ.obj שהוא קובץ בינארי המכיל את הקוד המקומפל. מקשר (Linker) מחבר את תכנית המקור )או כמה קבצי מקור( עם פונקציות מהספריות הסטנדרטיות לקובץ אחד שמהווה תכנית לביצוע )זהו קובץ ההרצה בעל סיומת.exe שנוצר כתוצאה מהקישור). בניה )Bulid( תהליך ביצוע הידור ולאחריו קישור. מנפה שגיאות (Debugger) כלי עזר לגילוי מיקומן של טעויות לוגיות בתכנית. סביבת העבודה מאפשרת יצירת מעטפת )פרויקט( לתוכנית שלנו, ללא פרויקט קובץ בשפת C הוא לא יותר מאשר אוסף תווים, בעזרת סביבת העבודה נוכל ליצור פרויקט אשר מריץ את אוסף התווים הללו ויוצר מהם תוכנית בשפת מחשב. 1
3( תכנית ראשונה ב- - C שלבי הביצוע: 3.1 יצירת מעטפת התוכנית (project) 4 הפרויקט למעשה הוא אוסף של מחיצות )תיקיות( שבעזרתן בונה ומריץ VS2005 את התוכנית שלנו. קובץ ה C שלנו יישב בתוך פרויקט. ללא פרויקט, קובץ ה C הוא אוסף של תווים ולא ניתן להריץ אותו! עתה ניצור את הפרויקט הראשון שלנו 4 File New Project Win 32 Win32 Console Application Name: welcome Location: S:\ OK Application Settings (under Overview) Under "Additional options" Mark The "Empty project" square. Finish לאחר שיצרנו פרויקט אנו נקבל את המסך הבא )VS2002( 4 2
טעויות נפוצות 4 סטודנט שלא יבחר במשבצת Empty project לא יוכל להריץ בהמשך את התוכנית שהוא כתב. יצירה של פרויקט חדש בשם של פרויקט שכבר קיים. מידע חשוב 1. אין לכם הרשאות כתיבה לכונן! C 2. יש לכם הרשאות כתיבה לכונן D, אבל כונן זה נמחק בכל יום בשעה 00400 או כאשר אתם מבצעים logout ולכן מומלץ מאוד שלא להשתמש בו לשמירת מידע חשוב. 3. לכל אחד מכם מוקצה 15mb בכונן S, זהו כונן רשת הנגיש מכם מקום )גם מהבית( וכתובתו ftp://sansana.bgu.ac.il מומלץ להשתמש בכונן זה אך שימו לב!!!!! מכיוון שזהו כונן רשת, לפעמים הקשר עם השרת אובד, לכן חובה עליכם לגבות את העבודה )דוא"ל, זיכרון נייד DOK וכו'(. לא תקבלו הארכות למטלה בגלל טעויות טכניות של איבוד\מחיקה\דוא"ל שנעלם וכו'!!! זכרו לגבות את עבודתכם באופן שוטף. 3
3.2 הכנת קובץ המקור בחלון העריכה 4(welcome.c) הקבצים שאותם תכתבו בשפת C בתוך העורך נקראים "קבצי מקור". לקבצים אלו צריכה להיות סיומת של c. ברירת המחדל של סביבת הפיתוח הוא לפתוח/לשמור קבצים אלו כקבצי.cpp ולכן נצטרך לדאוג לתת להם את הסיומת המתאימה בעת פתיחה/שמירה. Project Add new item כעת, צרו קובץ חדש בשם 4 welcome.c במקרה של סביבת הפיתוח ++C 2005 4Microsoft Visual Code C++ File (.cpp) Name: welcome.c Location: D:\welcome Add כתוב בחלון העריכה את התכנית הבאה )אפשר להעתיק ולהדביק אבל עדיף לרשום בצורה מלאה(, שימו לב להתנהגות העורך במילים השונות )הצבעים(, שימו לב כאשר אתם רושמים את הסוגריים ושימו לב מה קורה לסמן לאחר הקשת 4 Enter #include <stdio.h> void main() { printf("welcome to C Programming!\n"); } 3.3 שמירת קובץ המקור 4.File Save אם פתחתם את קובץ המקור כקובץ.cpp ולא כקובץ c. ניתן לשנות זאת כאן, על ידי לחיצה עם הכפתור הימני על הקובץ ובחירת rename )או שינוי שם(. שימו לב שינוי שם הקובץ מחוץ לתוכנית VS2005 )למשל על ידי שינוי השם ב )windows תגרום לכך שיעלם הקישור בין הפרויקט שלכם לקובץ שכתבתם )הקובץ לא יימחק מהדיסק הקשיח(. לכן כל שינוי שם יתבצע מתוך! VS2005 Build Compile 3.4 פעולות הידור, קישור והרצת תכנית 4 פעולת הידור )קומפילציה( מתבצעת ע"י אם בזמן ההידור יתגלו טעויות יש לתקן אותן ולעשות קומפילציה מחדש. פעולת קישור מתבצעת ע"י אם בזמן הקישור יתגלו טעויות, יש לתקן אותן ולעשות את פעולות ההידור והקישור מחדש. Build Build Solution Debug Start without debugging הרצת תכנית מתבצעת ע"י 4 4
Project Properties עתה נגרום למהדר לעבוד בתצורה של C ולא של ++C עבור הפרויקט שלנו 4 יפתח המסך הבא 4 Configuration Properties C/C++ Advanced נבחר ב ונשנה את השורה השנייה Compile As ל - (/TC) 4 Compile as C Code 5 ונלחץ אישור.
3.5 פתיחה של פרויקט קיים סגרו את התוכנית.VS2005 במידה ונרצה לפתוח שוב את הפרויקט שלנו, לא נלחץ על קובץ ה C שכתבנו!אלא נחפש קובץ עם סיומת.sln ונלחץ עליו לחיצה כפולה. במידה ויש בידינו את קובץ C בלבד, עלינו לפתוח פרויקט חדש ולייבא אותו נלמד מייד כיצד( )4 תכנית שנייה - redirection #include <stdio.h> void main() { printf("welcome to C Programming!\n"); } תשנו את תוכן התכנית מ 4 #include <stdio.h> ל 4 void main(){ int num; printf("hello! Please enter a integer number:\n"); scanf("%d", &num); printf("the number was %d.\ngood by!\n", num); } תריצו את התכנית כמה פעמים עם מספרים שונים. כרגע, תלחצו על לשונית project ותבחרו ב- יש לבחור ב- 4debugging configuration properties בתוך.properties כרגע לתוך command arguments יש למלא כפי שנראה בהמשך 4 6
יש ללחוץ על.OK כרגע, תשימו לב שאם נריץ את התכנית, נראה שהתכנית לא מדפיסה כלום למסך השחור )תקלידו בכל מקרה מספר והתכנית תסתיים(. אם עכשיו תבדקו, קיים קובץ בשם out.txt בתיקייה של הפרוייקט שלכם. עכשיו באותה תיקייה של הפרוייקט תייצרו קובץ בשם.in.txt בקובץ הזה תרשמו מספר כלשהו ואחרי זה תלחצו על.ENTER כרגע תשמרו ותסגרו את הקובץ. עכשיו, נרשום באותו החלון של 4properties 7
אם נריץ את התכנית נשים לב כי עכשיו התכנית שלנו כותבת למסך, אך לא מחכה לקלט מהמשתמש. היא בעצם משתמשת בתוכן של הקובץ in.txt כקלט. עכשיו נעשה שינוי נוסף 4 וכרגע כל פלט )הדפסות( של התכנית נכנס לקובץ out.txt כשהתכנית משתמשת ב- in.txt כקלט. שימו לב! יחד עם כל עבודת בית תקבלו קובץ in.txt ו- right.txt. אתם תתבקשו להריץ את התכנית כמו בדוגמה האחרונה ואחרכך להשוות את הקובץ שהתכנית שלכם מייצרת )out.txt( לקובץ שלנו.)right.txt( רק אחרי ששני הקבצים זהים לגמרי מותר להגיש את העבודה. בשביל לבדוק ששני קבצים זהים ניתן להשתמש בתוכנית בשם TextDiff הניתנת להורדה בחינם ב- http://www.angusj.com/delphi/textdiff.html או באתר שמשווה קבצים 4. http://www.comparemyfiles.com/default.aspx 8
שגיאות ואזהרות שגיאות 4 שגיאות קומפילציה, שגיאת זמן ריצה ושגיאה לוגית. שגיאת קומפילציה יש טעות בתחביר של הקוד ולכן המהדר אינו יכול להריץ את הקוד. שגיאה זאת "קלה" יחסית היות ובד"כ מסופק לנו מידע על מיקום ומהות הטעות )לפעמים גם הפתרון(. שגיאת זמן ריצה הקוד כתוב נכון מבחינה תחבירית, אך בזמן הריצה מתקיימת שגיאה )למשל, תוכנית שמחלקת שני מספרים שהמשתמש מכניס, כאשר המכנה הוא אפס(. ניתן לדעת בדיוק היכן ארעה שגיאה זו. שגיאה לוגית התוכנית רצה היטב אך התשובה המתקבלת לא נכונה. אזהרות 4 הקובץ יוכל להתקמפל אבל המהדר מספק אזהרות לגבי טעויות שעלולות לצוץ בזמן הריצה קיימות אזהרות מסוימות שצוות הקורס יגדיר לכם שיש להתעלם מהם. כל אזהרה שצוות הקורס לא הגדיר לכם כתקינה יש להתייחס אליה כאל שגיאה!!! הסיבה לכך היא שאתם כותבים את העבודות תחת סביבת ++C )נוחות(, אבל העבודה שלכם נבדקת בסביבת ansic אמיתי. בעוד שהמהדר של שפת ++C גמיש ביכולות ההרצה שלו, המהדר של ansic הרבה יותר נוקשה, ולכן כל אזהרה שמופיעה במהדר של ++C )ולא הוגדרה לכם ככזאת שיש להתעלם ממנה( היא שגיאה ב ansic! 5( תכנית שלישית - שגיאות קומפילציה. את התוכנית השנייה אין צורך להקליד. התוכנית נמצאת בספריה ציבורית, וכל מה שדרוש זה להעביר עותק שלה מהספרייה הציבורית לפרויקט שלנו. נעשה זאת בעזרת תוכנת FTP )המובנת בתוך חלונות. 4.1 ראשית נפתח פרויקט חדש בשם "average" )אם אינכם זוכרים הביטו בסעיף קודם(. 4.2 עתה נעתיק אל הקובץ 4 )My Computer( פתח את "המחשב שלי" בשורת הכתובת )אם היא איננה מופיעה הוסף אותה דרך תפריט )View הקלד ftp://ftp.bgu.ac.il זוהי הכתובת של שרת ה FTP הציבורי של אונב"ג. היכנס לתיקיית pub היכנס לתיקיית programming1 העתק את הקובץ average.cpp לתוך המחיצה הראשית של הפרויקט שלכם )אפשר להעתיק את הקובץ לכל מקום בדיסק הקשיח, רק יש לזכור לאן העתקתם...( עתה, ב- C++ 2005 Project Add Existing Item 4Microsoft Visual בחלון שניפתח חפשו את הקובץ ששמרתם, ולחצו פעמיים על הקובץ. average.cpp כתוצאה מכך מתקבלת התוכנית הבאה 4 9
/* Program that calculates the average of n integers #include <stdio.h> void main() { int n, number, sum=0; do { printf("enter the number of integers : "); scanf("%d",&n); }while(n<=0); for(i=1, sum=0; i<=n; i++){ printf("enter an integer #%d: ",i); scanf("%d",&number); sum=sum+number } printf("the average of %d integers is %d\n", n, sum/n); 4.2 בצע פעולת קומפילציה על התכנית. הודעות של ה- Compiler מופיעות בחלק התחתון של המסך. 4.3 תקן את שגיאות הקומפילציה בתכנית בהתאם להודעות השגיאה )יחד עם המתרגל(. 4.4 המשך בפעולות הנדרשות עד אשר לא תיהנה יותר שגיאות קומפילציה. שימו לב : במידה ואתם מייבאים קובץ הקובץ לא מועתק לתיקייה שלכם! אלא נוצר קישור בין הקובץ לבין הפרויקט. לכן, בכל פעם שאתם מייבאים קובץ בידקו שאתם יודעים מהו המיקום שלו בדיסק הקשיח. 11
6( תכנית רביעית: שגיאות לוגיות ומנפה השגיאות( Debugger (The interactive אם בזמן הביצוע יתקבלו תוצאות שאינן נכונות )כלומר התוכנית רצה אך היא לא מבצעת את מה שרצינו שתבצע(, מומלץ להשתמש ב- Debugger ע"מ לגלות טעויות לוגיות בתכנית. ראשית בצע את כל הפעולות הנדרשות להכנה והרצה של התכנית. חזור על סעיף 3.1 אבל שנה את שם הפרויקט "welcome" ל- "area" ובפרמטר Location יש לקבוע."S:\area" שלך באמצעות לספריה התוכנית נמצאת באותה ספריה ציבורית,"Pub" העתק את תכנית "area" תוכנת ה- FTP )ראה סעיף 4(. כתוצאה מכך מתקבלת התוכנית הבאה 4 #include <stdio.h> // Line 1 #define PI 3.14159 // Line 2 void main(){ // Line 3 double radius, width, height, circ_area, rec_area; // Line 4 int i; // Line 5 for (i = 0 ; i <= 3 ; i++){ // Line 6 printf("enter the circle radius\n"); // Line 7 scanf("%lf",&radius); // Line 8 circ_area = circle_area(radius); // Line 9 printf("the circle area with radius %f is %f\n", radius, circ_area); // Line 10 printf("enter the sides of a rectangle\n"); // Line 11 scanf("%lf%lf",&width, &height); // Line 12 rec_area = rectangle_area(width, height); // Line 13 printf("the rectangle area with the width %f",width); // Line 14 printf("and the height %f is %f\n", height, rec_area); // Line 15 } // Line 16 } // Line 17 /* Function "circle_area" Line 18 */ double circle_area(double radius){ // Line 19 double aux; // Line 20 aux= PI*radius; // Line 21 return aux*aux; // Line 22 } // Line 23 /* Function "rectangle_area" Line 24 */ double rectangle_area(double width, double height){ // Line 25 return width+height; // Line 26 } // Line 27 התכנית area מחשבת את שטחי המעגל והמלבן לפי הנתונים הנקלטים מהמקלדת. התכנית מורכבת משלושת הפונקציות הבאות 4.main, circle_area, rectangle_area ניתן להתייחס לפונקציה כאל קופסה שחורה 4 מקבלת קלט מסוים, מבצעת פעולות חישוב כלשהיא ומחזירה תשובה )כמובן שאפשר לגשת ולבחון את פעולת החישוב שהקופסה מבצעת(. בהמשך הקורס תלמדו לעומק מהי פונקציה. ) r 2 עכשיו המשך בפעולות הנדרשות לשם הרצת התוכנית )ראה סעיף 3(. הרץ את התוכנית וודא שהתוכנית מחשבת נכון את שטחי המעגל ( רוחב(. )אורך כפול והמלבן כמה פעמים הפונקציה מבצעת את התהליך? איזו שורה אחראית לכך? 11
המנפה (Debugger) עוזר למצוא את מיקום הטעויות הלוגיות בתכנית המקור ע"י 4 יכולת ההתמקדות על קטע מסוים, בדיקת הערכים הנבחרים, יכולת להפסיק באופן זמני את הרצת התכנית כדי לבדוק ו/או לשנות ערכים מסוימים. F9 הפעולות הבסיסיות שיש לבצע ע"מ לנפות שגיאות 4 קביעת נקודות בהן יש לעצור את התכנית Breakpoints) 4(Set הקישו )מופיע סימון בצבע האדום(. בתכנית הקישו F5 4Debugger הפעלת תכנית באמצעות הקישו F10 4(step by step) קידום התכנית בצעדים קידום התכנית עד נקודת העצירה הבאה או עד הסוף 4 הקישו F5 כניסה לתוך הפונקציה 4 הקישו F11 הקישו Shift+F5 4 Debugger - יציאה מה בשורה הנבחרה :Debugger הרצת תכנית area באמצעות בתוכנית שלנו ישנן שגיאות לוגיות. אנחנו נשתמש ב- Debugger על מנת למצוא ולתקן אותן באופן הבא 4 בשורה 7 )בתחילת השורה מופיע סמל בצבע אדום(. קבע נקודת העצירה (F9) )F5(. הרץ את התכנית לאחר עצירת התכנית בנקודה הקבועה מופיע על המסך חץ צהוב )בתוך העיגול האדום( המצביע על הפקודה הבאה אשר תתבצע. בחלק התחתון של המסך מופיעה טבלת המשתנים.Context בטבלה זו ניתן לבחון את הערכים הנוכחיים של המשתנים השונים בתוכנית )שימו לב שלפעמים לא כולם מופיעים בהמשך הקורס נלמד מדוע(. בצע את התכנית צעד-צעד ע"י לחצת F10. במהלך ההרצה הסתכל בטבלת המשתנים. ערכים שהשתנו בצעד האחרון - נצבעים בצבע אדום. לאחר כל לחיצה על F10 החץ הצהוב מתקדם בשורה אחת. )scanf הקישו F10 ולאחר מכן אם החץ הצהוב מצביע על שורות 2 או 12 )עם פקודת ה- ע"מ להכניס את )area הקישו על הקונסול )המסך השחור שהוא חלון הריצה של התוכנית הנתונים הנדרשים. F11 אם החץ הצהוב מצביע על שורות 3 או 13 )עם הקריאות לפונקציות( הקישו ע"מ להיכנס לתוך הפונקציות. )במקום F10) ע"מ לסיים אם החץ הצהוב מצביע על השורות האחרונה לביצוע )11( הקישו שוב על F5 את ביצוע התכנית.. F5+Shift ע"י Debugger אם מצאת שגיאה צא מה- בזמן תהליך ה debug ניתן להצביע על משתנה כלשהוא )עם העכבר( ולראות את תוכנו ובנוסף ניתן להתערב ולשנות ערכים של משתנים באמצע ההרצה. תקן את השגיאה שמצאת בעזרת העורך. הרץ שוב את התכנית וודא שהתיקון שעשית אכן פתר את הבעיה. בתוכנית ישנן שתי בעיות. תקן גם את הבעיה השנייה..1.2.3 7( הערות כלליות ניתן להוריד את ה- Visual ++C 2008 Express Edition בחינם מהאתר של מיקרוסופט )גגלו(. יש לבצע רישום תוך 30 יום, אחרת התוכנית תפסיק לעבוד! )הרישום הוא חינם( ניתן לבצע אותו על ידי לחיצה על תפריט help ומשם על.register product בהצלחה! 12